Настройка произвольных правил получения фактических данных для бюджетирования

В данной статье рассматривается практическая задача настройки произвольных правил получения фактических данных.

Подробнее подсистема бюджетирования в системе рассмотрена в документации и статьях ИТС http://its.1c.ru/db/metod81#browse:13:-1:2115:2443:2449 

Виды бюджетов состоят из статей и показателей, определяющих структуру. Виды бюджетов позволяют планировать (вводить планы) и строить отчетность план-факт.

Фактические показатели отражаются в системе регистрацией хозяйственных операций оперативными документами прочих разделов системы, плановые показатели задаются в подсистеме бюджетирования непосредственно.

Фактические данные попадают в бюджетный отчет либо «на лету», либо от операций, зарегистрированных в системе, либо через механизм «хранимого» факта, когда операции фиксируются в определенной таблице и данные этой таблицы используются для построения фактической части бюджета.

Для определения того, какие именно данные будут записываться по бюджетной статье в раздел фактических данных, применяются Правила получения фактических данных.

В настройках правил получения фактических данных необходимо выбрать раздел источника данных. Это могут быть данные оперативного контура учета, бухгалтерского, международного, а также произвольный источник данных.

При планировании бюджета плановые показатели вводятся пользователями вручную или могут быть рассчитаны автоматически на основе других данных бюджета, либо в расчете могут быть применены также данные, которые рассчитываются по Правилам получения фактических данных. При этом источник этих правил может быть произвольным.

Данная статья предназначена для разъяснения принципов, которых надо придерживаться для формирования корректного произвольного запроса к данным.

Примеры типовых правил можно изучить в макетах в метаданных справочников ПравилаПолученияФактаПоСтатьямБюджетов и ПравилаПолученияФактаПоПоказателямБюджетов.

Особенность работы в сервисе fresh

Для пользователей сервиса fresh важно отметить, что на фреше нет настройки СКД из-за ограничений безопасности сервиса. Делать настройки произвольных правил нужно на локальной базе выгрузкой-загрузкой базы из сервиса, либо переносом настроек нужного вида бюджета со статьями и показателями, по которым есть правила факта, через импорт бюджетной модели. В выгрузку берутся все статьи и показатели и правила по ним.

Требования к пользовательской СКД для формирования правил получения фактических данных для статей бюджета

Для подготовки запроса к данным нужно придерживаться следующих правил:

1.         При формировании запроса надо учитывать, что помимо необходимых для проектного запроса полей он должен содержать в своем составе обязательно поля:

ПериодСекунда,

ПериодМинута,

ПериодЧас,

ПериодДень,

ПериодНеделя,

ПериодДекада,

ПериодМесяц,

ПериодКвартал,

ПериодПолугодие,

ПериодГод.

Для полей с типом Период нужно обязательно очистить Роль в СКД.

Обязательно наличие в запросе поля ИсточникДанных, значение поля должно быть равным соответствующему реквизиту в настройке правила получения фактических данных. Например, «Источник данных»: «Сумма оплаты поставщикам» «КАК ИсточникДанных». Имена идентификаторов данных лучше делать уникальными для каждого правила. Если в одном виде бюджета будут статьи с правилами с неуникальным идентификатором, то это может привести к проблемам агрегации результата работы правил.

Для каждого поля – аналитики в СКД требуется указать тип значения:

Особенность для типов данных ПВХ. Расшифровка до аналитик с таким типом данных будет работать при перечислении типов данных этой аналитики.

То есть, указать для такого измерения тип Харастеристика.СтатьиРасходов – недостаточно. Надо смотреть типы в ПВХ, и всех их перечислять в СКД. Иначе происходит непопадание сумм при расшифровке бюджетного отчета. В самом отчете все отображается, но в расшифровке этих данных не будет.

Обязательно требуется указание полей: 

СуммаРегл – сумма в валюте регламентированного учета;

СуммаУпр – сумма в валюте управленческого учета;

СуммаВВалюте – сумма в валюте. Это поле должно быть использовано в паре с полем Валюта или аналитикой, у которой есть реквизит Валюта.

Обязательно требуется раздел для оптимизации состава полей СКД. Например, это может быть выполнено так:

Копировать в буфер обмена
{ВЫБРАТЬ
    Регистратор.*,
    ПериодСекунда,
    ПериодДень,
    ПериодНеделя,
    ПериодДекада,
    ПериодМесяц,
    ПериодКвартал,
    ПериодПолугодие,
    ПериодГод,
    ХозяйственнаяОперация.*,
    ИсточникДанных,
    Организация.*,
    Подразделение.*,
    НаправлениеДеятельности.*,
    КорНаправлениеДеятельности.*,
    ДенежныеСредства.*,
    КорДенежныеСредства.*,
    ТипДенежныхСредств.*,
    КорТипДенежныхСредств.*,
    СтатьяДвиженияДенежныхСредств.*,
    Валюта.*,
    КорВалюта.*,
    Сумма,
    СуммаРегл,
    СуммаВВалюте,
    СуммаКВыплатеВРамкахЛимита,
    СуммаКВыплатеСверхЛимита,
    СуммаКВыплате}
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(
   &НачалоПериода, &КонецПериода, Авто, 
   

   {("ИдентификаторИсточникаДанных") КАК ИдентификаторИсточникаДанных, 
   // Обязательное поле отбора для новой версии алгоритма получения фактических данных
   "Источник данных" КАК ИсточникДанных,
    (СтатьяДвиженияДенежныхСредств).*, (Валюта).*, (КорВалюта).*, (Организация).*, (Подразделение).*, (НаправлениеДеятельности).*, (КорНаправлениеДеятельности).*}) КАК ДвиженияДенежныхСредств
   {ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиХозяйственныхОпераций КАК НастройкиХозяйственныхОпераций
   ПО ДвиженияДенежныхСредств.ХозяйственнаяОперация = НастройкиХозяйственныхОпераций.ХозяйственнаяОперация}
 

{ГДЕ
    ДвиженияДенежныхСредств.Регистратор.*,
    ДвиженияДенежныхСредств.ПериодГод,
    ДвиженияДенежныхСредств.ПериодПолугодие,
    ДвиженияДенежныхСредств.ПериодКвартал,
    ДвиженияДенежныхСредств.ПериодМесяц,
    ДвиженияДенежныхСредств.ПериодДекада,
    ДвиженияДенежныхСредств.ПериодНеделя,
    ДвиженияДенежныхСредств.ПериодДень,
     (ВЫБОР
    КОГДА НастройкиХозяйственныхОпераций.Расход = ЗНАЧЕНИЕ(Перечисление.ТипыДанныхУчета.ДенежныеСредства)
     ТОГДА ДвиженияДенежныхСредств.ДенежныеСредства
    ИНАЧЕ ДвиженияДенежныхСредств.КорДенежныеСредства
   КОНЕЦ).* КАК ДенежныеСредства,
    (ВЫБОР
    КОГДА НастройкиХозяйственныхОпераций.Расход = ЗНАЧЕНИЕ(Перечисление.ТипыДанныхУчета.ДенежныеСредства)
     ТОГДА ДвиженияДенежныхСредств.КорДенежныеСредства
    ИНАЧЕ ДвиженияДенежныхСредств.ДенежныеСредства
   КОНЕЦ).* КАК КорДенежныеСредства,
    (ВЫБОР
    КОГДА НастройкиХозяйственныхОпераций.Расход = ЗНАЧЕНИЕ(Перечисление.ТипыДанныхУчета.ДенежныеСредства)
     ТОГДА ДвиженияДенежныхСредств.ТипДенежныхСредств
    ИНАЧЕ ДвиженияДенежныхСредств.КорТипДенежныхСредств
   КОНЕЦ).* КАК ТипДенежныхСредств,
    (ВЫБОР
    КОГДА НастройкиХозяйственныхОпераций.Расход = ЗНАЧЕНИЕ(Перечисление.ТипыДанныхУчета.ДенежныеСредства)
     ТОГДА ДвиженияДенежныхСредств.КорТипДенежныхСредств
    ИНАЧЕ ДвиженияДенежныхСредств.ТипДенежныхСредств
   КОНЕЦ).* КАК КорТипДенежныхСредств}

Поле «ИдентификаторИсточникаДанных»: «Сумма оплаты поставщикам» « КАК ИдентификаторИсточникаДанных», должно быть в параметрах виртуальной таблицы или в секции ГДЕ, используется для оптимизации.

Обязательно указание параметров, которые ограничивают период выборки данных. Эти ограничения добавляются в раздел ГДЕ или параметры виртуальной таблицы. Применяемые параметры – &НачалоПериода, &КонецПериода.

Для новой версии отбора фактических данных обязательно указание поля отбора «Источник данных»: « Сумма оплаты поставщикам» «КАК ИсточникДанных», где «Источник данных» соответствует соответствующему полю в правилах получения фактических данных.

Для оптимизации работы СКД поля, которые не могут быть добавлены в параметры виртуальной таблицы, указываются в разделе ГДЕ:

Копировать в буфер обмена
{ГДЕ
    ДвиженияДенежныхСредств.Регистратор*,
    ДвиженияДенежныхСредств.ПериодГод,
    ДвиженияДенежныхСредств.ПериодПолугодие,
    ДвиженияДенежныхСредств.ПериодКвартал,
    ДвиженияДенежныхСредств.ПериодМесяц,
    ДвиженияДенежныхСредств.ПериодДекада,
    ДвиженияДенежныхСредств.ПериодНеделя,
    ДвиженияДенежныхСредств.ПериодДень,
    ДвиженияДенежныхСредств.ПериодДень КАК ПериодКурса...}

Если не указана одна из сумм, то получение суммы в другой валюте будет выполнено при помощи конвертации значения одной суммы в требуемую валюту. Если сумма регламентированного учета и сумма управленческого учета указаны, то конвертации в валюты регламентированного и управленческого учетов происходить не будет. Сумма будет взята из соответствующего поля.

Существует список зарезервированных имен параметров получения фактических данных, которые используются / могут использоваться системой:

НачалоПериода – параметр, который необходимо указывать для получения оборотов. При получении факта значение параметра будет заменено на значение из настроек отчета.

КонецПериода – параметр, который необходимо указывать для получения оборотов. При получении факта значение параметра будет заменено на значение из настроек отчета.

Полный список зарезервированных имен параметров приведен в методе ИменаОбщихПараметровПравилПолученияФакта общего модуля БюджетированиеСервер. Избегайте использования зарезервированных имен параметров для указания отбора на уровне параметров системы компоновки данных.

Для настройки произвольных правил к показателям бюджетов применяются все те же требования, что и к статьям бюджетов. Отличие состоит в том, что в запросе не указываются поля с периодами, так как выборка данных будет происходить на конкретную дату.

Для ознакомления с примерами запросов можно воспользоваться объектами метаданных Справочники.ПравилаПолученияФактаПоСтатьямБюджетов и Справочники.ПравилаПолученияФактаПоПоказателямБюджетов. В их составе содержатся макеты, содержащие типовые запросы к данным, которые применяются в предопределенных способах доступа к данным.

Особенность расшифровки до регистратора из отчетов по произвольным правилам: необходимо в СКД снять отметку Ограничение поля с Регистратор.

2. Поле регистратор в тексте запроса  является обязательным, в случае если по правилам получения фактических данных предполагает хранение факта.

Мы рассмотрели важные особенности по настройке произвольных правил получения данных в бюджетировании.

В качестве отправной точки для настройки своих правил могут выступать примеры настроенных в системе источников данных для оперативного и бухгалтерского учетов. Посмотреть их можно в Конфигураторе в макетах справочников:

ПравилаПолученияФактаПоСтатьямБюджетов;

ПравилаПолученияФактаПоПоказателямБюджетов.

Отладка получения фактических данных из бюджетного отчета

Применение пользовательских систем компоновки данных расширяет возможности типового решения бюджетирования, является проектной модификацией.

Правила разработки и отладки  СКД приведены в документации по платформе 1С:Предприятие https://its.1c.ru/db/v83doc, в разделе руководства разработчика, главы 8 и 10.

Следует учесть, что успешно выполняемый запрос СКД в консоли запросов по умолчанию не дает гарантии выполнения СКД в системе бюджетирования, СКД преобразуется в модуле бюджетирования и требуют именования атрибутов рассмотренных выше.  Ниже рассматриваются основные ступени преобразования СКД внутри кода подсистемы бюджетирования.

Для успешной отладки требуется сузить выборку рассматриваемых данных, для этого из исходного вида бюджета выделить требуемые для отладки части:

создать новый вид бюджета;

поместить в него статью бюджета с нужными аналитиками;

для статьи настроить правила получения данных с СКД.

Это позволит изолировать отлаживаемые данные от других данных. В бюджете должна содержаться минимальная совокупность данных, отладка которых производится, остальные данные, не связанные с выполнением отлаживаемой СКД должны быть исключены из бюджетного отчета или документа.

Общая схема формирования бюджета

Рассмотрим схематично этапы формирования бюджетного отчета, чтобы определить в них место методов получения факта.

Из бюджетного отчета или экземпляра бюджета вызывается метод ПолучитьДанныеДляБюджетногоОтчета общего модуля БюджетнаяОтчетностьВыводСервер. Данный метод содержит в себе этапы формирования бюджетного отчета.

Из экземпляра бюджета, в случае заполнения бюджета по данным бюджетирования, метод вызывается 2 раза. Первый раз для заполнения табличных частей документа ОборотыПоСтатьямБюджетов и АналитикаСтатейБюджетов, при этом заполняются план и факт, факт при этом кешируется в оперативной памяти. Второй раз для отображения бюджетного отчета с учетом перезаполненных табличных частей документа, к плану и кешированному факту из оперативной памяти добавляются данные документа.

Приведем краткое описание основных этапов формирования бюджета, на которых происходит вывод данных в бюджет.

Получение заранее кэшированных вспомогательных данных для формирования бюджета, для этого используется метод ВыводПолучениеДанныхДляБюджетногоОтчетаПолучениеКонтрольПараметровВыводаВидаБюджета общего модуля БюджетнаяОтчетностьВыводСервер. Подготовка вспомогательных таблиц может занимать значительное время, поэтому при первом выполнении отчета данные кэшируются в регистре сведений КэшВспомогательныхДанныхВидаБюджета.

Сбор плановых данных, фактических данных, фактических данных хранимых в регистре накопления ФактическиеДанныеБюджетирования (получаются отдельно от факта «на лету», т.к. в момент получения данных в бюджете не требуют выполнения схем компоновки сбора факта). Данный шаг выполняется методом ВыводПолучениеДанныхДляБюджетногоОтчетаПолучениеДанныхПоИсточникам общего модуля БюджетнаяОтчетностьВыводСервер. Одним из подэтапов является получение фактических данных «онлайн» (путем выполнения схем компоновки данных правил получения факта) – метод ФактПоВидуБюджета общего модуля БюджетированиеСервер. Вернемся к нему позже. Если данные на данном этапе получены корректно, то проблема может произойти в двух следующих этапах, но они подробно в этой статье не рассматриваются, требуется рассмотреть самостоятельно.

Далее происходит «мэппинг» полученных данных (пункт 2) на структуру отчета (пункт 1). Подготавливается таблица ДанныеЯчеек. Это выполняется методом ВыводПолучениеДанныхДляБюджетногоОтчетаПолучениеКонтрольСтруктурыЯчеекСДанными общего модуля БюджетнаяОтчетностьВыводСервер.

Непосредственно вывод полученных данных в табличный документ бюджета, а также расчет числовых показателей, выводимых в ячейки бюджета, происходит на этом этапе, для этого вызывается метод ВыводПолучениеДанныхДляБюджетногоОтчетаВыводБюджетногоОтчета общего модуля БюджетнаяОтчетностьВыводСервер.

Методы получения факта

В системе есть 2 методики получения фактических данных: неоптимизированная и «альтернативная», оптимизированная.

В бюджетных отчетах используются оптимизированные методы получения фактических данных, а, например, в отчете Результат работы правил - используются прежние, неоптимизированные методы получения факта (это служит своеобразной проверкой).

Суть различий между неоптимизированными и оптимизированными методами, состоит в том, что если в неоптимизированных методах получения фактических данных каждая схема компоновки Правила получения фактических данных выполняется отдельно, то в оптимизированном факте схемы компоновки объединяются в одну общую схему компоновки.

В обоих методах также получаются значения Нефинансовых показателей, которые одинаковы для обеих методик сбора фактических данных. См. метод ПолучитьЗначенияПоИсточникуДанныхНефинансовый общего модуля БюджетированиеСервер.

Список методов получения фактических методов можно получить из метода ФактПоВидуБюджета общего модуля БюджетированиеСервер. Рассмотри некоторые из них.

Для неоптимизированного факта, для целей отладки представляют интерес методы ФактСтатьиБюджетовПоПравилу и ФактПоказателяБюджетовПоПравилу общего модуля БюджетированиеСервер.

В оптимизированном факте ситуация иная, поэтому смотрим метод РассчитатьФактПоВидуБюджетаАльтернативный общего модуля БюджетированиеСервер и вложенные в него методы. В первую очередь стоит посмотреть метод ФактическиеДанныеИзИсточников.

В общем виде общую схему оптимизированного получения факта можно посмотреть в макете ШаблонПолученияФакта соответствующего справочника (ПравилаПолученияФактаПоСтатьямБюджетов или ПравилаПолученияФактаПоПоказателямБюджетов).

Схемы компоновки же, заданные в соответствующих правилах, помещаются внутрь набора ОбъединенныйФакт. Период получения фактических данных, а также некоторые прочие вспомогательные данные передаются в генерируемые таблицы внешних наборов данных. Пользовательские параметры, за исключением списка зарезервированных имен параметров (см. метод ИменаОбщихПараметровПравилПолученияФакта общего модуля БюджетированиеСервер) переименовываются по типу ИдентификаторСхемыКомпоновки + ПользовательскоеИмяПараметра. Отбор данных компоновки накладывается не на всю результирующую схему, а на уровень отборов структуры данных (получается идентификатор источника данных и его отбор).

Для анализа можно схему компоновки, настройки и сформированный макет компоновки выгрузить в текстовые файлы. Соответствующий код можно написать перед выполнением метода ВыгрузитьРезультатПоМакетуСУчетомОграниченийДоступа  в методе ФактическиеДанныеИзИсточников общего модуля БюджетированиеСервер.

Отладка методов получения факта

Необходимо убедиться, что проблема заключается именно в получении факта, а не, например, в «мэппинге» или выводе данных в табличный документ. Для этого нужно установить точку останова в методе получения факта, например, ФактПоВидуБюджета общего модуля БюджетированиеСервер, и убедиться, что фактические данные или не получены, или получены некорректно (например, сумма отличается). Если метод возвращает корректные данные, то, скорее всего проблема или на уровне «мэппинга» или при выводе результата в табличный документ. Более детальное рассмотрение этих случаев в статье не приводится, требуется рассмотреть самостоятельно.

Фактические данные не получены. Рекомендуется по соответствующей статье бюджетов (показателю бюджетов) из статьи (показателя) перейти на закладку Правила получения фактических данных. Убедиться, что есть не помеченные на удаление правила получения фактических данных соответствующего типа правила: сценарий Фактические данные в бюджетном отчете будет использовать правила с типами Фактические данные и Исполнение бюджета и фактические данные, сценарий Исполнение бюджета будет использовать правила с типами Исполнение бюджета и Исполнение бюджета и фактические данные. Далее нужно вызвать отчет Результат работы правил.

Для оптимизированного факта и неоптимизированного факта правила оформления схемы получения факта отличаются.

Если отчет Результат работы правил выдает «пустой» результат, то стоит выполнить запрос в консоли запросов и убедится, что данные существуют.

Если отчет Результат работы правил (на данный момент выполняется неоптимизированными методами получения факта) показывает результат, а оптимизированный метод получения факта – нет, то, вероятно, дело в оформлении схемы компоновки получения факта, если используются произвольные (пользовательские) схемы получения фактических данных.

Для произвольных (пользовательских) правил получения фактических данных стоит проверить еще раз выполнение рекомендаций по оформлению. Стоит обратить внимание на оформление произвольных правил получения фактических данных в демобазе (на данный момент есть произвольные правила для статей, например, для статьи «Административно-управленческие расходы (аренда, СКД)»).

Для выполнения запроса к данными используются ресурсы СуммаУпр, СуммаРегл, СуммаВВалюте. Если в СКД присутствует только одна из сумм, то при формировании бюджета, будет взята ближайшая сумма. Например, если в схеме СКД указана только СуммаВВалюте, то для других валют она будет пересчитана по курсу. Если указаны СуммаУпр или СуммаРегл, то при формировании бюджета в соответствующих валютах (управленческая или регламентированная) у данных ресурсов будет приоритет.

Если факт получается, но не получается аналитика факта, то проверить указание типа в схеме компоновки данных, а также то, что в карточке правила получения фактических данных на закладке Заполнение аналитик статьи указано точное соответствие между аналитикой статьи и полем схемы компоновки (по умолчанию подбираются по типу значения).

Пример настройки произвольных правил получения фактических данных для бюджетирования

При формировании примера переключатель Получение фактических данных по данным оперативного учета установлен на значении По аналитическим оборотным регистрам.

Шаг 1. Создадим статью бюджета «Произвольный запрос Оплата поставщику» с аналитиками: Контрагенты, Договоры, Статьи ДДС.

Шаг 2. Создадим правило получения фактических данных с источником данных Произвольные данные. В поле Источник данных укажем «Сумма оплаты поставщику».

Шаг 3. Далее переходим по гиперссылке Настроить схему получения данных и в открывшемся окне Настройки схемы получения произвольных данных нажимаем на кнопку Редактировать схему компоновки.

В открывшемся окне Конструктор схемы компоновки данных с помощью кнопки Добавить набор данных создаем новый запрос.

И далее открываем Конструктор запроса.

Шаг 4. В конструкторе запроса необходимо выбрать регистр накопления.

Шаг 5 .Для того чтобы понять какой необходимо выбрать регистр накопления откроем в документе Списание безналичных ДС отчет Движения документа. В нем видим, что данные по ХО «Оплата поставщику» хранятся в РН «Движения Денежные средства -Конрагент».

Шаг 6. В конструкторе запроса в поле База данных выбираем РН «ДвиженияДенежныеСредстваКонтрагентОбороты» и переносим в поле Таблицы.

Шаг 7. Далее заполняем Параметры виртуальной таблицы.

Шаг 8. Из поля Таблицы переносим все периоды и необходимые реквизиты в область Поля.

Шаг 9. Выделим еще одно поле «СтатьяКалькуляции», которое будет иметь текстовое представление.

Укажем текстовое представление – это название источника данных «Сумма оплаты поставщикам».

Шаг 10. На закладке Объединения/Псевдонимы переименуем:

■ «ПодразделениеДоходовРасходов» в «Подразделение» (если необходимо);

■ «СуммаОплатыОборот» в «СуммаУпр»;

■ «СуммаОплатыРеглОборот» в «СуммаРегл»;

■ «ВалютаПлатежа» в «Валюта»;

■ «СуммаОплатыВВалютеПлатежаОборот» в «СуммаВВалюте»;

■ «Поле1» в «ИсточникДанных».

До переименования:

После переименования:

Шаг 11. Перейдем на закладку Компоновка данных и добавим поля и условия.

Шаг 12. В окне Конструктор схемы компоновки данных необходимо в СКД снять отметку Ограничение поля с Регистратор – это особенность расшифровки до регистратора из отчетов по произвольным правилам.

Для всех периодов убираем роли.

Для измерений указываем тип данных.

Шаг 13. Переходим на закладку Параметры и в столбце Значение для строки ХозяйственнаяОперация: выбираем хозяйственную операцию и в столбце ограничение устанавливаем флаг.

Шаг 14.Выходим из конструктора схемы компоновки данных, завершаем редактирование и записываем правило.